对动态数量的图像应用滚动平均。

简短说明

文件: \examples\Processing\Loop\RollingAverage\rollingAverage_Loop.vad

默认平台: imaFlex CXP-12 Quad

简要说明

在不引入帧延迟的情况下,在连续图像流上实现滚动平均值。 计算最后 N 幅单色图像的平均值,并用于以彩色可视化与当前图像的差分结果。 用于计算平均值的图像数量默认设为 128,但可以进行修改。

此设计展示了滚动平均值的工作原理。 但核心要素是一个能够支持更多应用和机器视觉操作的循环。 为了解循环的工作原理及其实现方式,这个示例是一个绝佳的起点。

算法

计算每个单像素的平均值,并将其归一化到 8 bit 的输入值范围内。 为此,将接收到的每一帧与其前几帧相加,并除以接收到的帧数。 如果达到滚动平均序列的长度,则总和会减去存储和延迟的帧。 这样,从第一幅图像开始就已经生成了输出图像。

在该设计中,两个条件定义了滚动平均序列的长度。 这两个值都称为 N_rolling,且需要设置为相同的值。 一个用于处理减影图像的延迟存储过程,另一个用于像素值归一化。

使用的循环

使用 RxImageLink 和 TxImageLink 算子来实现循环处理。 输入图像序列中未归一化的平均和在一个循环中处理。 需要第二个循环处理来存储输入的帧,以便后续减去其像素值。 每个循环都需要与输入的相机帧同步。 这就引入了一个需要满足启动条件的 SYNC 算子。 启动条件本身由 InsertImage 处理,其中首次运行会引入单个最小帧。 所使用的 SYNC 会将帧尺寸最大化至所需的值。

由于平均处理需要存储一定数量的帧,因此使用了 ImageBufferMultiRoiDyn 算子。 在满足同步目的的同时,只需简单地存储前几幅图像,并由生成的最小帧来辅助完成。

使用 VA 仿真将有助于详细了解该功能如何围绕 SYNC 运行。 通常,一系列人工生成的最小帧可实现同步。

可视化

实现了两种不同的可视化方式。第一种将生成一个 24 bit 的 RGB 图像,其中:

  • 通道 - 内容
  • 红色 (RED) - 当前图像
  • 绿色 (GREEN) - 平均图像
  • 蓝色 (BLUE) - 差分图像

第二种方法基于 HSL 色彩空间,随后将其转换为 24bit RGB:

  • 通道 - 内容
  • 色相 (HUE) / 色彩角度 - 差分图像,其中最小值为绿色
  • 饱和度 (SATURATION) - 设置为最大值
  • 亮度 (LIGHTNESS) - 当前图像

第二种方法通过 EffectEnable = 1 开启。 动态增益因子可用于对所有色相角度进行差分 Scaling。

VisualApplets 设计

示例“rollingAverage_Loop.vad”专为基本配置下的单色 CameraLink 相机设计,分辨率为 1024x1024,每个像素 8 bit。

模拟数据

示例“rollingAverage_Loop.vad”文件夹 %VASINSTALLDIR%\examples\Processing\Advanced\RollingAverage\street_sequence*.jpg 包含了一系列用于仿真的实用图像。 为了减少数据量,使用了有损压缩格式。